﻿using System;
using PTiRouZ.Net.SilverLight.Api;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Runtime.Serialization;

using System.Linq;

namespace PTiRouZ.Net.SilverLight.Api.HelloTipi
{
    /*id = int (identifiant de l’utilisateur)
name = char (nom complet de l’utilisateur)
screen_name = char (identifiant de l’utilisateur suivi de sa famille login#famille)
profile_image_url = char (avatar de l’utilisateur)
url = char (url du profil)
email = char (email de l’utilisateur) *
birthday = char (date d’anniversaire de l’utilisateur)
address_1 = char (adresse de l’utilisateur) *
address_2 = char (adresse de l’utilisateur, seconde ligne) *
zip = char (code postal de l’utilisateur)
state = char (état/province de l’utilisateur)
city = char (ville de l’utilisateur)
country_name = char (pays de l’utilisateur)
phone_1 = char (numéro de téléphone de l’utilisateur) *
phone_2 = char (second numéro de téléphone de l’utilisateur) **/

    /// <summary>Objet correspondant à la requete statuses/family_friends</summary>
    /// <see cref="family_friends"></see>
    public class family_friends
    {
        /// <summary>Id de l'utilisateur</summary>
        [DataMember]
        public int id { get; set; }

        /// <summary>nom complet de l’utilisateur</summary>
        [DataMember]
        public string name { get; set; }

        /// <summary>Pseudonyme de l'utilisateur</summary>
        [DataMember]
        public string screen_name { get; set; }

        /// <summary>url de l'avatar du user</summary>
        /// <remarks>url valide 1h</remarks>
        [DataMember]
        public string profile_image_url { get; set; }

        /// <summary>url du profil de l’utilisateur</summary>
        [DataMember]
        public string url { get; set; }

        /// <summary>email de l’utilisateur</summary>
        [DataMember]
        public string email { get; set; }

        /// <summary>date d’anniversaire de l’utilisateur</summary>
        [DataMember]
        public string birthday { get; set; }

        /// <summary>adresse de l’utilisateur</summary>
        [DataMember]
        public string address_1 { get; set; }

        /// <summary>email de l’utilisateur</summary>
        [DataMember]
        public string address_2 { get; set; }

        /// <summary>code postal de l’utilisateur</summary>
        [DataMember]
        public string zip { get; set; }

        /// <summary>état/province de l’utilisateur</summary>
        [DataMember]
        public string state { get; set; }

        /// <summary>ville de l’utilisateur</summary>
        [DataMember]
        public string city { get; set; }

        /// <summary>pays de l’utilisateur</summary>
        [DataMember]
        public string country_name { get; set; }

        /// <summary>numéro de téléphone de l’utilisateur</summary>
        [DataMember]
        public string phone_1 { get; set; }

        /// <summary>second numéro de téléphone de l’utilisateur</summary>
        [DataMember]
        public string phone_2 { get; set; }

    }

    public delegate void FamilyFriendsEventHandler(object sender, FamilyFriendsEventArgs e);

    public class FamilyFriendsEventArgs : EventArgs
    {
        public FamilyFriendsEventArgs(ObservableCollection<family_friends> ff)
        {
            _result = ff;
        }

        private ObservableCollection<family_friends> _result;
        public ObservableCollection<family_friends> result { get { return _result; } }
    }

    /*public delegate void FamilyFriendEventHandler(object sender, FamilyFriendEventArgs e);

    public class FamilyFriendEventArgs : EventArgs
    {
        public FamilyFriendEventArgs(family_friends ff)
        {
            _result = ff;
        }

        private family_friends _result;
        public family_friends result { get { return _result; } }
    }*/

    public partial class apitxt : api
    {

        public event FamilyFriendsEventHandler FamilyFriendsCompleted;
        //public event FamilyFriendEventHandler FamilyFriendCompleted;

        /// <summary>Retourne la liste des contacts d’une famille de l’utilisateur authentifié.</summary>
        /// <returns>Retourne une liste de <see cref="family_friends"/></returns>
        /// <param name="site">nom du site pour lequel on souhaite récupérer les contacts</param>/// 
        /// <example>http://apitxt.hellotipi.com/statuses/family_friends.format?site=nomdefamille</example>
        public void FamilyFriends(string site)
        {
            base.APICallCompleted += new APICallCompletedEventHandler(FamilyFriendsCallCompleted);

            var querystring = new List<KeyValuePair<string, string>> { 
                new KeyValuePair<string, string>("site", site),
                new KeyValuePair<string, string>("source", this.appSource)
            };

            GetUrlApi("statuses/family_friends.json", querystring);
        }

        void FamilyFriendsCallCompleted(object sender, ApiOpenReadCompletedEventArgs e)
        {
            try
            {
                FamilyFriendsCompleted.Invoke(sender, new FamilyFriendsEventArgs(serializeTools.Deserialize<ObservableCollection<family_friends>>(e.Result)));
            }
            finally
            {
                base.APICallCompleted -= new APICallCompletedEventHandler(FamilyFriendsCallCompleted);
            }
        }




        /// <summary>Retourne les informations d'un contact d’une famille de l’utilisateur authentifié.</summary>
        /// <returns>Retourne une structure <see cref="family_friends"/></returns>
        /// <param name="id">identifiants du contact à retourner</param>///         /// 
        /// <param name="site">nom du site pour lequel on souhaite récupérer les contacts</param>/// 
        /// <example>http://apitxt.hellotipi.com/statuses/family_friends.format?site=nomdefamille</example>
        /*public void FamilyFriend(string id, string site)
        {
            base.APICallCompleted += new APICallCompletedEventHandler(FamilyFriendCallCompleted);

            var querystring = new List<KeyValuePair<string, string>> { 
                new KeyValuePair<string, string>("site", site)
            };

            GetUrlApi(String.Format("statuses/family_friends.json", querystring));
        }

        void FamilyFriendCallCompleted(object sender, ApiOpenReadCompletedEventArgs e)
        {
            ObservableCollection<family_friends> ff = serializeTools.Deserialize<ObservableCollection<family_friends>>(e.Result);

            var q = from family_friends contact in ff
                    where contact.id == 

            FamilyFriendCompleted.Invoke(sender, new FamilyFriendEventArgs(serializeTools.Deserialize<family_friends>(e.Result)));
        }*/

    }
}
